package com.datangnet.parking.basecommon.dao;

import java.util.List;
import java.util.Map;



public interface PublicDao {
	
	public Object insert(Object entity);
	
	public void update(Object entity);
	
	public <T> T getById(Class<T> clazz, Object id);

	/**
	 * 是否存在
	 * @param hql
	 * @param parameters
	 * @return
	 */
	public boolean ifExistedByHQL(String hql, Map<String, Object> parameters);
	
	/**
	 * 是否存在
	 * @param hql
	 * @param parameters
	 * @return
	 */
	public boolean ifExistedByHQL(String hql, Object[] parameters);
	
	public List<?> queryByHQL(String hql, Map<String, Object> parameters);
	
	/**
	 * 分页查询
	 * @param hql
	 * @param parameters
	 * @param firstResult 分页的起始位置, 从0开始
	 * @param maxResults 分页的每页数量
	 * @return
	 */
	public List<?> queryByHQLWithPaging(String hql, Map<String, Object> parameters, int firstResult, int maxResults);
	
	/**
	 * 分页查询
	 * @param sql
	 * @param parameters
	 * @param firstResult 分页的起始位置, 从0开始
	 * @param maxResults 分页的每页数量
	 * @param clazz 查询子句组织转化为对象的类型.
	 * @return
	 */
	public List<?> queryBySQLWithPaging(String hql, Map<String, Object> parameters, int firstResult, int maxResults, Class<?> clazz);
	
	public List<?> queryByHQL(String hql, Object[] parameters);
	
	public List<?> queryBySQL(String sql, Map<String, Object> parameters);
	
	public List<?> queryBySQL(String sql, Object[] parameters);
	
	public int executeHQL(String hql, Map<String, Object> parameters);
	
	public int executeHQL(String hql, Object[] parameters);
	
	/**
	 * 统计数量
	 * @param hql
	 * @param parameters
	 * @return
	 */
	public Long countByHQL(String hql, Map<String, Object> parameters);
	
	/**
	 * 统计数量
	 * @param hql
	 * @param parameters
	 * @return
	 */
	public Long countByHQL(String hql, Object[] parameters);
	
	/**
	 * 统计数量
	 * @param sql
	 * @param parameters
	 * @return
	 */
	public Long countBySQL(String hql, Map<String, Object> parameters);
	
	/**
	 * 统计数量
	 * @param sql
	 * @param parameters
	 * @return
	 */
	public Long countBySQL(String hql, Object[] parameters);
	
}
